home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / xen / interface / physdev.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.2 KB  |  146 lines

  1. /*
  2.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  3.  * of this software and associated documentation files (the "Software"), to
  4.  * deal in the Software without restriction, including without limitation the
  5.  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  6.  * sell copies of the Software, and to permit persons to whom the Software is
  7.  * furnished to do so, subject to the following conditions:
  8.  *
  9.  * The above copyright notice and this permission notice shall be included in
  10.  * all copies or substantial portions of the Software.
  11.  *
  12.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  14.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  15.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  16.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  17.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  18.  * DEALINGS IN THE SOFTWARE.
  19.  */
  20.  
  21. #ifndef __XEN_PUBLIC_PHYSDEV_H__
  22. #define __XEN_PUBLIC_PHYSDEV_H__
  23.  
  24. /*
  25.  * Prototype for this hypercall is:
  26.  *  int physdev_op(int cmd, void *args)
  27.  * @cmd     == PHYSDEVOP_??? (physdev operation).
  28.  * @args == Operation-specific extra arguments (NULL if none).
  29.  */
  30.  
  31. /*
  32.  * Notify end-of-interrupt (EOI) for the specified IRQ.
  33.  * @arg == pointer to physdev_eoi structure.
  34.  */
  35. #define PHYSDEVOP_eoi            12
  36. struct physdev_eoi {
  37.     /* IN */
  38.     uint32_t irq;
  39. };
  40.  
  41. /*
  42.  * Query the status of an IRQ line.
  43.  * @arg == pointer to physdev_irq_status_query structure.
  44.  */
  45. #define PHYSDEVOP_irq_status_query     5
  46. struct physdev_irq_status_query {
  47.     /* IN */
  48.     uint32_t irq;
  49.     /* OUT */
  50.     uint32_t flags; /* XENIRQSTAT_* */
  51. };
  52.  
  53. /* Need to call PHYSDEVOP_eoi when the IRQ has been serviced? */
  54. #define _XENIRQSTAT_needs_eoi    (0)
  55. #define     XENIRQSTAT_needs_eoi    (1U<<_XENIRQSTAT_needs_eoi)
  56.  
  57. /* IRQ shared by multiple guests? */
  58. #define _XENIRQSTAT_shared    (1)
  59. #define     XENIRQSTAT_shared    (1U<<_XENIRQSTAT_shared)
  60.  
  61. /*
  62.  * Set the current VCPU's I/O privilege level.
  63.  * @arg == pointer to physdev_set_iopl structure.
  64.  */
  65. #define PHYSDEVOP_set_iopl         6
  66. struct physdev_set_iopl {
  67.     /* IN */
  68.     uint32_t iopl;
  69. };
  70.  
  71. /*
  72.  * Set the current VCPU's I/O-port permissions bitmap.
  73.  * @arg == pointer to physdev_set_iobitmap structure.
  74.  */
  75. #define PHYSDEVOP_set_iobitmap         7
  76. struct physdev_set_iobitmap {
  77.     /* IN */
  78.     uint8_t * bitmap;
  79.     uint32_t nr_ports;
  80. };
  81.  
  82. /*
  83.  * Read or write an IO-APIC register.
  84.  * @arg == pointer to physdev_apic structure.
  85.  */
  86. #define PHYSDEVOP_apic_read         8
  87. #define PHYSDEVOP_apic_write         9
  88. struct physdev_apic {
  89.     /* IN */
  90.     unsigned long apic_physbase;
  91.     uint32_t reg;
  92.     /* IN or OUT */
  93.     uint32_t value;
  94. };
  95.  
  96. /*
  97.  * Allocate or free a physical upcall vector for the specified IRQ line.
  98.  * @arg == pointer to physdev_irq structure.
  99.  */
  100. #define PHYSDEVOP_alloc_irq_vector    10
  101. #define PHYSDEVOP_free_irq_vector    11
  102. struct physdev_irq {
  103.     /* IN */
  104.     uint32_t irq;
  105.     /* IN or OUT */
  106.     uint32_t vector;
  107. };
  108.  
  109. /*
  110.  * Argument to physdev_op_compat() hypercall. Superceded by new physdev_op()
  111.  * hypercall since 0x00030202.
  112.  */
  113. struct physdev_op {
  114.     uint32_t cmd;
  115.     union {
  116.         struct physdev_irq_status_query         irq_status_query;
  117.         struct physdev_set_iopl             set_iopl;
  118.         struct physdev_set_iobitmap         set_iobitmap;
  119.         struct physdev_apic             apic_op;
  120.         struct physdev_irq             irq_op;
  121.     } u;
  122. };
  123.  
  124. /*
  125.  * Notify that some PIRQ-bound event channels have been unmasked.
  126.  * ** This command is obsolete since interface version 0x00030202 and is **
  127.  * ** unsupported by newer versions of Xen.                 **
  128.  */
  129. #define PHYSDEVOP_IRQ_UNMASK_NOTIFY     4
  130.  
  131. /*
  132.  * These all-capitals physdev operation names are superceded by the new names
  133.  * (defined above) since interface version 0x00030202.
  134.  */
  135. #define PHYSDEVOP_IRQ_STATUS_QUERY     PHYSDEVOP_irq_status_query
  136. #define PHYSDEVOP_SET_IOPL         PHYSDEVOP_set_iopl
  137. #define PHYSDEVOP_SET_IOBITMAP         PHYSDEVOP_set_iobitmap
  138. #define PHYSDEVOP_APIC_READ         PHYSDEVOP_apic_read
  139. #define PHYSDEVOP_APIC_WRITE         PHYSDEVOP_apic_write
  140. #define PHYSDEVOP_ASSIGN_VECTOR         PHYSDEVOP_alloc_irq_vector
  141. #define PHYSDEVOP_FREE_VECTOR         PHYSDEVOP_free_irq_vector
  142. #define PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY XENIRQSTAT_needs_eoi
  143. #define PHYSDEVOP_IRQ_SHARED         XENIRQSTAT_shared
  144.  
  145. #endif /* __XEN_PUBLIC_PHYSDEV_H__ */
  146.